1. Technical Field
The present invention relates to an improved data processing system. In particular, the present invention relates to extending functions, such as actions, operations, or user interfaces, in a software application. Still more particular, the present invention relates to implementing dynamic function groups in a software application.
2. Description of Related Art
In an extendable software application, such as the Eclipse Platform, third party vendors may provide additional services to the user through extensions, which are often referred to as “plugins”. The Eclipse platform is an open source platform for product development. Plugins allow a third party vendor to add additional functionalities or extended sets of functionalities (ESFs) to a software application. An Extended Set of Functionality is a collection of contributions associated with the same logical purpose.
In order to use these plugin extensions to perform extended functionalities, end-users choose which plugins to install to their environment. In general, plugins which the end-user installs are always on or always off. This ‘always-on’ or ‘always-off’ approach limits the enabling and disabling of extended functionalities to the plugin extensions as a whole. Thus, end-users may not choose particular set of functionalities to enable or disable by default. Vendors that require this flexibility would be required to provide some other mechanism to enable or disable their extensions.
In addition, if another third party vendor contributes similar functionalities to the software application, these functionalities must co-exist with other functionalities since there is no predescribed system that handles enablement of third party vendor contributions. The co-existence forced on the end-user may or may not make sense depending on the software application and can potentially clutter the Graphical User Interface with extensions that are not directly relevant to the end-user.
For example, in an enterprise software development environment focused on J2EE application development, a software developer may write software that needs to run on J2EE Application Servers from two separate vendors, such as BEA WebLogic Server, a product available from BEA Systems, Inc., and WebSphere Application Server, a product available from International Business Machines Corporation. In an extendable software application which allows plugin extensions and provides for no coordination between those extensions, the user may see both BEA and IBM content for the same project, including menu actions, editor pages, wizard pages, and toolbar contributions, even though the particular project is only targeted for one of the two possible J2EE Application Servers.
Furthermore, in order to provide a consistent and focused environment for the end-user, each vendor must provide custom mechanisms to enable or disable their functionality, which can make integration of similar types of functionalities difficult.
One approach to alleviate the problem of co-existence and granularity of functions is for each individual vendor to integrate a mechanism that dynamically determines whether a contributed functionality is enabled or disabled in the software application. However, this approach can lead to code duplication, since each contributing third party vendor has to provide their own dynamic determination mechanism. Thus, extra code that is unrelated to the contributed functionality has to be integrated to each vendor's contributions.
Furthermore, each contributing vendor has to handle their own collection of functionalities, generally by integrating the code into the added functionalities themselves. With no mechanism to coordinate individual contributions from third parties, vendors cannot communicate a relative priority to indicate to the software application how to display or choose which functionalities to use or present to the user.
Another approach attempts to resolve the problem of co-existence and prevention of cluttered user interface, by selectively revealing user interface elements to the user based on a defined user role or user behavior. However, this selective mechanism focuses enabling and disabling functionalities based on user actions, not on the vendor content or a project state where project is a collection of editable artifacts. It would be desirable to have even tighter consistency and usability focused on the specific end-user.
Therefore, it would be advantageous to have an improved method, apparatus, and computer instructions to dynamically enable and disable multiple third party contributed functionalities within a software application without the disadvantages of prior art described previously.